Source:SLASH'EM 0.0.7E7F2/nhxdr.h
Below is the full text to nhxdr.h from the source code of SLASH'EM 0.0.7E7F2. To link to a particular line, write [[SLASH'EM 0.0.7E7F2/nhxdr.h#line123]], for example. The latest source code for vanilla NetHack is at Source code. 1. /* $Id: nhxdr.h,v 1.7 2003/10/25 18:06:00 j_ali Exp $ */ 2. /* Copyright © Slash'EM Development Team 2001-2003 */ 3. /* NetHack may be freely redistributed. See license for details. */ 4. 5. #ifndef NHXDR_H 6. #define NHXDR_H 7. 8. #ifndef FALSE 9. #define FALSE 0 10. #endif 11. 12. #ifndef TRUE 13. #define TRUE 1 14. #endif 15. 16. #ifndef MIN 17. #define MIN(a, b) ((a) <= (b) ? (a) : (b)) 18. #endif 19. 20. #ifndef MAX 21. #define MAX(a, b) ((a) >= (b) ? (a) : (b)) 22. #endif 23. 24. #ifndef NDECL 25. /* 26. * Assume an ANSI X3.159 compatible compiler 27. */ 28. #define NDECL(f) (f)(void) 29. #define FDECL(f, p) (f)p 30. #define VDECL(f, p) (f)p 31. #define CHAR_P int 32. #define SHORT_P int 33. #define BOOLEAN_P int 34. #endif 35. 36. #define NHEXT_XDR_RNDUP(x) (((x) - 1 | 3) + 1) 37. 38. typedef enum { nhext_xdr_false = 0, nhext_xdr_true = 1 } nhext_xdr_bool_t; 39. 40. enum nhext_xdr_op { 41. NHEXT_XDR_ENCODE, NHEXT_XDR_DECODE, NHEXT_XDR_FREE, NHEXT_XDR_COUNT 42. }; 43. 44. typedef struct nhext_xdr { 45. void *x_data; 46. enum nhext_xdr_op x_op; 47. nhext_xdr_bool_t (*x_write)(struct nhext_xdr *xdrs, const void *addr, 48. int size); 49. nhext_xdr_bool_t (*x_read)(struct nhext_xdr *xdrs, void *addr, int size); 50. void (*x_destroy)(struct nhext_xdr *xdrs); 51. unsigned int x_pos, x_size; 52. } NhExtXdr; 53. 54. typedef struct NhExtIO_ NhExtIO; 55. typedef int (*nhext_io_func)(void *handle, void *buf, unsigned int len); 56. typedef struct NhExtNB_ NhExtNB; 57. 58. #define E extern 59. 60. E unsigned int FDECL(nhext_xdr_getpos, (NhExtXdr *)); 61. E nhext_xdr_bool_t FDECL(nhext_xdr_setpos, (NhExtXdr *, unsigned int)); 62. E void FDECL(nhext_xdr_free, (nhext_xdr_bool_t (*)(), char *)); 63. E void FDECL(nhext_xdrmem_create, (NhExtXdr *, char *, unsigned int, 64. enum nhext_xdr_op)); 65. E void FDECL(nhext_xdrio_create, (NhExtXdr *, NhExtIO *, enum nhext_xdr_op)); 66. 67. #define nhext_xdr_destroy(xdrs) (*(xdrs)->x_destroy)(xdrs) 68. 69. E nhext_xdr_bool_t FDECL(nhext_xdr_long, (NhExtXdr *, long *)); 70. E nhext_xdr_bool_t FDECL(nhext_xdr_u_long, (NhExtXdr *, unsigned long *)); 71. E nhext_xdr_bool_t FDECL(nhext_xdr_short, (NhExtXdr *, short *)); 72. E nhext_xdr_bool_t FDECL(nhext_xdr_u_short, (NhExtXdr *, unsigned short *)); 73. E nhext_xdr_bool_t FDECL(nhext_xdr_int, (NhExtXdr *, int *)); 74. E nhext_xdr_bool_t FDECL(nhext_xdr_u_int, (NhExtXdr *, unsigned int *)); 75. E nhext_xdr_bool_t FDECL(nhext_xdr_char, (NhExtXdr *, char *)); 76. E nhext_xdr_bool_t FDECL(nhext_xdr_u_char, (NhExtXdr *, unsigned char *)); 77. E nhext_xdr_bool_t FDECL(nhext_xdr_enum, (NhExtXdr *, int *)); 78. E nhext_xdr_bool_t FDECL(nhext_xdr_bool, (NhExtXdr *, nhext_xdr_bool_t *)); 79. E nhext_xdr_bool_t FDECL(nhext_xdr_string, (NhExtXdr *, char **, unsigned int)); 80. E nhext_xdr_bool_t FDECL(nhext_xdr_bytes, (NhExtXdr *, char **, unsigned int *, 81. unsigned int)); 82. E nhext_xdr_bool_t FDECL(nhext_xdr_wrapstring, (NhExtXdr *, char **)); 83. E nhext_xdr_bool_t FDECL(nhext_xdr_vector, (NhExtXdr *, char *, unsigned int, 84. unsigned int, nhext_xdr_bool_t (*)())); 85. E nhext_xdr_bool_t FDECL(nhext_xdr_array, (NhExtXdr *, char **, unsigned int *, 86. unsigned int, unsigned int, nhext_xdr_bool_t (*)())); 87. 88. #define NHEXT_IO_RDONLY 1 89. #define NHEXT_IO_WRONLY 2 90. #define NHEXT_IO_NBLOCK 4 91. #define NHEXT_IO_NOAUTOFILL 8 92. #define NHEXT_IO_LINEBUF 16 /* Only honoured by text based calls */ 93. #define NHEXT_IO_SIMPLEBUFFER 32 94. #define NHEXT_IO_PENDING 64 95. 96. #if __GNUC__ >= 3 || __GNUC__ 2 && __GNUC_MINOR__ >= 5 97. #define NHEXT__PRINTF(p_fmt, p_arg0) \ 98. __attribute__((format(printf, p_fmt, p_arg0))) 99. #else 100. #define NHEXT__PRINTF(p_fmt, p_arg0) 101. #endif 102. 103. E NhExtIO *FDECL(nhext_io_open, (nhext_io_func, void *, unsigned int)); 104. E int FDECL(nhext_io_close, (NhExtIO *)); 105. E unsigned int FDECL(nhext_io_getmode, (NhExtIO *)); 106. E void FDECL(nhext_io_setmode, (NhExtIO *, unsigned int)); 107. E void FDECL(nhext_io_setautofill_limit, (NhExtIO *, unsigned int)); 108. E void FDECL(nhext_io_setnbfunc, (NhExtIO *, nhext_io_func)); 109. E int FDECL(nhext_io_filbuf, (NhExtIO *, int)); 110. E int FDECL(nhext_io_getc, (NhExtIO *)); 111. E int FDECL(nhext_io_read, (NhExtIO *, char *, int)); 112. E char *FDECL(nhext_io_getpacket, (NhExtIO *, int *)); 113. E int FDECL(nhext_io_willblock, (NhExtIO *)); 114. E int FDECL(nhext_io_flush, (NhExtIO *)); 115. E int FDECL(nhext_io_fputc, (int, NhExtIO *)); 116. E int FDECL(nhext_io_write, (NhExtIO *, char *, int)); 117. E int FDECL(nhext_io_writet, (NhExtIO *, char *, int)); 118. #ifdef _STDARG_H 119. E int FDECL(nhext_io_vprintf, (NhExtIO *, char *, va_list)); 120. #endif 121. E int FDECL(nhext_io_printf, (NhExtIO *, char *, ...)) NHEXT__PRINTF(2, 3); 122. 123. E NhExtNB *FDECL(nhext_nb_open, (nhext_io_func, void *)); 124. E int FDECL(nhext_nb_close, (NhExtNB *)); 125. E int FDECL(nhext_nb_read, (NhExtNB *, char *, int, int)); 126. 127. #endif /* NHXDR_H */ nhxdr.h